//7.2题：设计一个基本的D触发器，然后给基于D触发器设计8位移位寄存器
//制作者：FPGA研究者
//时间：2022年6月25日
module dff1(clk,rst,d,q); //注意不能用dff作为模块名 
    input clk,d;
	 input rst;
	 output reg q;
always@(posedge clk) begin
    if(!rst) q<=0;
	 else 
	   q<=d;
	end
endmodule

/* //方法1：一位数据输入，内部暂存7位数据，一位数据输出。
module shift8_dff(clk,rst,d,q);
   input clk,rst;
	input d;
	output q;
	wire d1,d2,d3,d4,d5,d6,d7;
     dff1 u1(.clk(clk),.rst(rst),.d(d),.q(d1));
	   dff1 u2(.clk(clk),.rst(rst),.d(d1),.q(d2));
		 dff1 u3(.clk(clk),.rst(rst),.d(d2),.q(d3));
		  dff1 u4(.clk(clk),.rst(rst),.d(d3),.q(d4));
		   dff1 u5(.clk(clk),.rst(rst),.d(d4),.q(d5));
			 dff1 u6(.clk(clk),.rst(rst),.d(d5),.q(d6));
			  dff1 u7(.clk(clk),.rst(rst),.d(d6),.q(d7));
			   dff1 u8(.clk(clk),.rst(rst),.d(d7),.q(q));
 
endmodule
*/

//方法2：一位数据输入，8位数据数移位输出

module shift8_dff(clk,rst,d,q);
   input clk,rst;
	input d;
	output [7:0]q;
	wire d1,d2,d3,d4,d5,d6,d7;
     dff1 u1(.clk(clk),.rst(rst),.d(d),.q(q[0]));
	   dff1 u2(.clk(clk),.rst(rst),.d(q[0]),.q(q[1]));
		 dff1 u3(.clk(clk),.rst(rst),.d(q[1]),.q(q[2]));
		  dff1 u4(.clk(clk),.rst(rst),.d(q[2]),.q(q[3]));
		   dff1 u5(.clk(clk),.rst(rst),.d(q[3]),.q(q[4]));
			 dff1 u6(.clk(clk),.rst(rst),.d(q[4]),.q(q[5]));
			  dff1 u7(.clk(clk),.rst(rst),.d(q[5]),.q(q[6]));
			   dff1 u8(.clk(clk),.rst(rst),.d(q[6]),.q(q[7]));
 
endmodule

